package com.shujia.core

import org.apache.spark.rdd.RDD
import org.apache.spark.util.LongAccumulator
import org.apache.spark.{SparkConf, SparkContext}

object Demo20Error {
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf()

    conf.setMaster("local")
    conf.setAppName("app")

    val sc = new SparkContext(conf)

    val studentsRDD: RDD[String] = sc.textFile("spark/data/students.csv")

    /**
     * 1、不生效的写法
     */
    var sum: Int = 0
    val mapRDD: RDD[String] = studentsRDD
      .map(line => {
        //当再算子内使用算子外的一个普通变量是，这个变量会被封装成一个变量副本发送到Executor中
        //所以再编写Spark代码是不能再算子内去修改算子外的一个普通变量
        sum += 1
        println(s"sum:$sum")
        line
      })
    val num: Long = mapRDD.count()
    println(s"num:$num")
    println(s"sum:$sum")

    /**
     * 2、RDD不能嵌套使用，再算子内不能出现RDD
     */
    /*    val rdd2: RDD[Unit] = studentsRDD
          .map(line => {
            studentsRDD.foreach(println)
            line
          })

        rdd2.foreach(println)*/


    /**
     * 3、在算子内不能使用算子外一个不能序列化的对象
     * 比如SparkContext不能序列化
     */
    val rdd2: RDD[Unit] = studentsRDD
      .map(line => {
        val scores: RDD[String] = sc.textFile("spark/data/score.txt")
        scores.foreach(println)
        line
      })

    rdd2.foreach(println)

  }
}
